#include "inc.h"

int g_iB = 0;

int main(int argc, char const *argv[])
{
    static int s_iA = 0;
    int *p = malloc(sizeof(int));
    *p = 0;

    pid_t pid;
    pid = fork();

    if ( pid > 0 )
    {
        printf("Father Process, pid = %d\n", pid);

        g_iB = 1;
        s_iA = 1;
        *p = 1;
        printf("Father Data:\n ( g_iB = %d addr: %p ), ( s_iA = %d addr: %p ) , ( *p = %d , addr: %p )\n",
                                    g_iB, &g_iB,         s_iA, &s_iA,                    *p, &p  );
    }
    else if ( pid == 0 )
    {
        printf("Son    Process, pid = %d\n", pid);
        printf("Son    Data:\n ( g_iB = %d addr: %p ), ( s_iA = %d addr: %p ) , ( *p = %d , addr: %p )\n",
                                    g_iB, &g_iB,         s_iA, &s_iA,                    *p, &p  );
    }

    return 0;
}

/*
程序功能
    观察父进程和子进程中的 全局变量, 静态变量, 局部变量, 指针变量 的值和地址
    可以看到, 不同变量的地址是相同的, 但是值却不一样

涉及函数
    fork

知识要点
    父进程和子进程拥有自己的虚拟内存空间。
    无论何种变量, 在父进程和子进程中都是独立的, 内存不共享.
*/